<?php
class MenuOptionValidator extends sfValidatorBase
{
    protected function configure($options = array(), $messages = array())
    {
        $this->addMessage('Opción', 'Indique el nombre de la opción.');
        $this->addMessage('URL', 'Indique el URL al que redirige la opción.');
        $this->addMessage('duplicated', 'Hay dos o más opciones con igual Nombre y URL');
        $this->addMessage('empty', 'Debe crear al menos una opción');
    }

    protected function doClean($values)
    {
        $errorSchema = new sfValidatorErrorSchema($this);

        // link is filled but no title
        if ($values['link'] && (!$values['title']))
        {
            $errorSchema->addError(new sfValidatorError($this, 'Opción'), 'Opción');
        }

        // title is filled but no link
        if ($values['title'] && !$values['link'])
        {
            $errorSchema->addError(new sfValidatorError($this, 'URL'), 'URL');
        }

        // no title and no link, remove the empty values
        if (!$values['link'] && !$values['title'])
        {
            unset($values);
        }

        // throws the error for the main form
        if (count($errorSchema))
        {
            throw new sfValidatorErrorSchema($this, $errorSchema);
        }
        return $values;
    }
}